<?php
// 设置脚本一直执行【PHP默认只能执行30秒】
/**
 * 注意：下载的速度可能会大于写硬盘速度，所以如果内存小，下载时间长可能会出现内存溢出的问题
 */
set_time_limit(0);
/**
 * 下载优酷所有动作片的图片，以电影的名称作为图片的名称
 */
// 生成一个curl对象
$curl = curl_init();
// 匹配电影所在DIV的正则
$re = '/<div class="yk-col3">.+<label>播放:/Us';
// 匹配img标签上的src和alt
$re1 = '/<img src="(.*)" alt="(.*)">/U';
// 从第2页开始循环一页一页的采集一直采集到25页
for($p=2; $p<=29; $p++)
{
	$url = "http://www.youku.com/v_olist/c_96_g__a__sg__mt__lg__q__s_1_r_0_u_0_pt_0_av_0_ag_0_sg__pr__h__d_1_p_$p.html";
	// 采集这个页面的HTML
	$html = get($url);
	/**** 使用正则从字符串中匹配到图片、标题、链接 ****/
	// 先把电影所在的DIV匹配出来：取出所有class="yk-col3"的div
	preg_match_all($re, $html, $movies);
	// 再循环每个DIV匹配出图片、标题、链接地址
	foreach ($movies[0] as $k => $v)
	{
		// 匹配img标签上的src和alt
		preg_match($re1, $v, $img);
		// 发请求图片到内存中
		$_imgData = get($img[1]);
		// 写到硬盘上的图片文件【下载】
		// 因为操作系统是GBK的，所以要把UTF8转成GBK
		file_put_contents('./youkuimg/'.mb_convert_encoding($img[2], 'gbk', 'utf-8').'.jpg', $_imgData);
	}
	// 休息3秒等图片写到硬盘之后再下载，避免内存溢出
	sleep(3);
}

/**
 * 发一个GET请求获取数据
 */
function get($url)
{
	global $curl;
	// 配置curl中的http协议->可配置的荐可以查PHP手册中的curl_
	curl_setopt($curl, CURLOPT_URL, $url);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
	curl_setopt($curl, CURLOPT_HEADER, FALSE);
	// 执行这个请求
	return curl_exec($curl);
}

